package com.atguigu.serurity.security;

import com.atguigu.commonutils.MD5;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

/**
 * <p>
 * 默认的密码的处理方法
 * </p>
 *
 * @author He Wentao
 * @since 2022/10/9 23:01
 */
/*
	加密规则的配置，需要实现 org.springframework.security.crypto.password.PasswordEncoder 接口
	这个接口有三个方法：
			encode():  用于对用户提交的密码进行加密
        	matches(): 用于验证密码，第一个参数表示用户提交的原始密码，第二个参数表示存储的密码，从包装类里面直接获取的
					   如果密码匹配，则返回 true，如果不匹配，则返回 false。
    		upgradeEncoding(): 用于设置是否对存储的密码，再次进行加密，一般默认返回 false 即可

	spring-security 有很多自带的加密规则实现，具体可以参考：https://zhuanlan.zhihu.com/p/188753842

*/
@Component
public class DefaultPasswordEncoder implements PasswordEncoder {

    public String encode(CharSequence rawPassword) {
        return MD5.getMD5(rawPassword.toString());
    }

    public boolean matches(CharSequence rawPassword, String encodedPassword) {

//        System.out.println("还没有加密的前端密码："+rawPassword);
//        System.out.println("数据库中的密码："+encodedPassword);
//        System.out.println("加密后的前端密码："+MD5.getMD5(rawPassword.toString()));
        return encodedPassword.equals(MD5.getMD5(rawPassword.toString()));
    }
}